package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.*;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.CatalogoNuevoItemForm;
import com.mastercard.assets.web.struts.forms.LoginForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class EditarUsuarioBuscarReg
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException, 
			MasterCardException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// obtiene el regId
		String regIdS = request.getParameter( "regId" ) ;
		
		int i = 0 ;
		
		// en caso de no null
		if( regIdS != null )
		{
			// trata de convertir
			try
			{
				i = Integer.parseInt( regIdS ) ;
				
				if( i < 1 )
				{
					// en caso de error
					user.setNextWorkArea( "/CalcularListaCatalogosUsuarios.do" ) ;
					
					user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.catalogos.usuario.edicion.RegIdIsNotNumber" , regIdS ) ) ;
					
				  	return mapping.findForward( "success" ) ;
				}
			}catch( Exception e )
			{
				
				// en caso de error
				user.setNextWorkArea( "/CalcularListaCatalogosUsuarios.do" ) ;
				
				user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.catalogos.usuario.edicion.RegIdIsNotNumber" , regIdS ) ) ;
				
			  	return mapping.findForward( "success" ) ;
			}
		}
		
		TblUsuario res = MasterCardDAO.findUserById( i ) ;
                
                String pw = MCUtil.decryptPassword( res.getPswd( ) ) ;
		
		// forma el form
		CatalogoNuevoItemForm f = new CatalogoNuevoItemForm( ) ;                
		
		f.setRegId( i ) ;
		f.setCampo1( res.getLogin( ) ) ;
		f.setCampo2( res.getEmail( ) ) ;
		f.setCampo3( res.getNombre( ) ) ;
//		f.setCampo4( res.getPswd( ) ) ;
                f.setCampo4( pw ) ;
		f.setOperation( 3 ) ;
		f.setCatalogoId( res.getTblPais().getCvePais() ) ;
		f.setCampo5( res.getTblPais().getNombre() ) ;
		
		List< TblRole > userRoles = res.getTblRoles( ) ;
                List< TblAgencia > userAgencia = res.getTblAgencias( ) ;
		
		request.setAttribute( "EditarUsuarioEditarForm" , f ) ;
		request.setAttribute( "UserRoles" , userRoles ) ;
		request.setAttribute( "UserLevels" , res.getTblNivels( ) ) ;
                
                if ( !userAgencia.isEmpty() )
                    request.setAttribute( "UserAgencia" , userAgencia ) ;
		
		boolean flag = false , agrupador = false ;
		
		// revisa si en los roles se encuentr BDM o banco
		for( TblRole role : userRoles )
		{
			// en caso d eeque coincida
			if( role.getCveRole( ) == 1 || role.getCveRole( ) == 3 || role.getCveRole( ) == 9  )
			{                            
				flag = true ;
				
				break ;
			}
		}
                
                // revisa si en los roles se encuentr BDM Titular
		for( TblRole role : userRoles )
		{
			// en caso d eeque coincida
			if( role.getCveRole( ) == 5 )
			{                            
				agrupador = true ;
				
				break ;
			}
		}
		
		if( flag )
		{
			request.setAttribute( "ShowCounts" , new Boolean( true ) ) ;
			request.setAttribute( "UserCounts" , res.getTblCuentas( ) ) ;                        
		}
		// en caso de uqe no pertenezca a dichos roles
		else
			request.setAttribute( "ShowCounts" , new Boolean( false ) ) ;
			
		if( agrupador )
                {
                    request.setAttribute( "ShowGroupers" , new Boolean( true ) ) ;
                    request.setAttribute( "UserGroupers" , res.getTblTipoCuentas( ) ) ;
                }else
                    request.setAttribute( "ShowGroupers" , new Boolean( false ) ) ;
                
                List< TblPaises> Paises = MasterCardDAO.getPaises();
                request.setAttribute( "ActivePaises" , Paises ) ;
		// en caso de que se cumpla, guarda el WorkArea
		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/EditarUsuario.jsp" ) ;
		
		//user.clearMessageError( ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
	}
	
}
